package com.zmn.oms.business.interfaces.servtype;

import com.google.common.collect.Lists;
import com.zmn.common.dto2.ResponseDTO;
import com.zmn.consts.GlobalConsts;
import com.zmn.oms.common.constant.OrderConsts;
import com.zmn.oms.common.dio.quotation3.ArtificialPromDRO;
import com.zmn.oms.common.dio.quotation3.ArtificialPromListQuery;
import com.zmn.oms.common.exception.OmsBaseException;
import com.zmn.oms.model.dto.work.modify.*;
import com.zmn.oms.model.entity.serviceitem.OrderServiceItem;
import com.zmn.scm2.common.model.dro.BasePageDRO;
import com.zmn.scm2.common.model.dro.scm.engineer.warehouse.EngineerWarehouseDRO;

import java.util.Collections;
import java.util.List;
import java.util.Objects;

/**
 * @ClassName ServTypeDistributeService
 * @description: 服务类型分发服务-不用分发的则在分发器中实现
 * @author: wangyanci
 * @create: 2021-11-26 18:03
 * @Version 1.0
 **/
public interface ServItemBService {

    /**
     * 获取工单服务项类型
     * @param checkQuotationTypeOrderDTO
     * @return
     */
     default Integer getServItemType(CheckQuotationTypeOrderDTO checkQuotationTypeOrderDTO){
         return OrderConsts.SERVICE_ITEM_TYPE_ORDER;
     }

    /**
     * 获取服务项
     * @param serviceItemQueryDTO
     * @return
     */
    default ResponseDTO<ServiceItemResultDTO> getServiceItem(ServiceItemQueryDTO serviceItemQueryDTO) {
        return ResponseDTO.fail();
    }

    /**
     * 获取服务项集合
     * @param serviceItemQueryDTO
     * @return
     */
    default List<ServiceItemResultDTO> listServiceItem(ServiceItemQueryDTO serviceItemQueryDTO) {
        return Lists.newArrayList();
    }

    /**
     * 是否计价器类型（包含计价器3.0）
     * @param servType
     * @return
     */
    default boolean isQuotationType(Integer servType) {
        return Objects.equals(servType, OrderConsts.SERVICE_ITEM_TYPE_FAULT)
                || Objects.equals(servType, OrderConsts.SERVICE_ITEM_TYPE_ADVANCE_PAY)
                || Objects.equals(servType, OrderConsts.SERVICE_ITEM_TYPE_QUOTATION_THREE)
                ;
    }

    /**
     * 是否计价器类型（不包含计价器3.0）
     * @param servType
     * @return
     */
    default boolean isQuotationNotThreeType(Integer servType) {
        return Objects.equals(servType, OrderConsts.SERVICE_ITEM_TYPE_FAULT)
                || Objects.equals(servType, OrderConsts.SERVICE_ITEM_TYPE_ADVANCE_PAY);
    }

    /**
     * 是否计价器3.0订单
     *
     * @param servType
     * @param finalPrice
     * @return
     */
    default boolean isQuotationThreeType(Integer servType, Integer finalPrice) {
        return Objects.equals(servType, OrderConsts.SERVICE_ITEM_TYPE_QUOTATION_THREE)
                && !Objects.equals(finalPrice,GlobalConsts.YES);
    }

    /**
     * 处理产品价格表id
     *
     */
    default void processProductTaraiffId(ProductTaraiffIdDTO productTaraiffIdDTO) {
        return;
    }

    /**
     * 查询工程师配件
     * @param partQueryDTO
     * @return
     */
    default ResponseDTO<BasePageDRO<EngineerWarehouseDRO>> listPageEngineerWarehouseByQueryV2(PartQueryDTO partQueryDTO) throws OmsBaseException {
        return ResponseDTO.fail();
    }

    /**
     * 过滤服务项
     *
     * @param serviceItems
     * @return
     */
    default List<OrderServiceItem> filterServiceItem(List<OrderServiceItem> serviceItems, Integer servItemType, Integer finalPrice) {
        return Collections.emptyList();
    }

    /**
     * 前提条件：没有默认服务项 则为null
     * 入参前台产品id ：找出所有后台产品的价格表类型，过滤出最高优先级价格表对应的后台产品（计价器3.0 > 提前付 > 计价器2.0 > 普通故障）。如果仅存一个后台产品，会把后台产品id和此后台产品的默认服务项返回。否则返回 null
     * 入参后台产品id ：查询后台产品默认服务项返回。
     */
    default BackProductPriceResultDTO queryBackProductPrice(BackProductPriceQueryDTO backProductPriceQueryDTO) {
        return null;
    }


    /**
     * 检查工单服务类型
     * @param dto
     * @throws OmsBaseException
     */
    default void checkOrderWorkServItemType(CheckOrderServItemTypeDTO dto) throws OmsBaseException {

    }

    /**
     * 校验服务项
     * @param orderServiceItemList
     * @throws OmsBaseException
     */
    default void verifyServiceItem(List<OrderServiceItem> orderServiceItemList) throws OmsBaseException{

    };

    /**
     * 获取服务类型id集合
     * @param servItemType
     * @return
     */
    default List<Integer> getServItemTypeIdList(Integer servItemType) {
        return Collections.EMPTY_LIST;
    }

    default List<ArtificialPromDRO> listArtificialProm(Integer servItemType, ArtificialPromQueryDTO query)  throws OmsBaseException{
        return Collections.EMPTY_LIST;
    }
}
